#include <stdio.h>
#include <stdlib.h>
#include "acquisition.h"
#include <unistd.h>
#include <sys/wait.h>
#include "../../IA/src/OutilsEntree.h"

int fils1(), fils2();
int fd[2];

/******************************************************/
/* fils 2 : Reception des données à la sortie du tube */
/* et utilisation à travers lynx */
/******************************************************/
int fils2()
{
	int fin = 0;
	close(fd[1]);
	positionObjetEntree objetResult;
	do{
		read(fd[0], &objetResult, sizeof(positionObjetEntree) );
		printf("<fils2> objetResult : <x=%f> <y=%f> <vx=%f> <vy=%f> <numero=%d>, <objet=", objetResult.x, objetResult.y, objetResult.vitesse_x, objetResult.vitesse_y, objetResult.numero);
		if (objetResult.objet == AUTRE)
		{
			printf("AUTRE>\n");
			fin =1;
		}
		else if (objetResult.objet == BALLE)
		{
			printf("BALLE>\n");
		}
		else if (objetResult.objet == KHEPERA_A_NOUS)
		{
			printf("K_A_NOUS>\n");
		}
		else if (objetResult.objet == KHEPERA_ADVERSE)
		{
			printf("KHEPERA_ADVERSE>\n");
		}
		else
		{
			printf("? ? ?>\n");
		}
	}
	while (fin == 0);
	close(fd[0]);
	printf("<fils2> Fin !!!!\n");

	exit(0);
}

/***********************/
/* Fonction Principale */
/***********************/
int pere( int argc, char** argv )
{ /* Processus Pere */
	int s, i;
	
	if (pipe(fd) != 0) /* fd devient descripteur de fichier */
	{
		fprintf(stderr,"<pere> Problemes dans l'ouverture de Pipe \n");
		exit(1);
	}
	
	/* Lancement d'un fils */
	if ( fork() == 0 )
	{ /* Processus Fils 1 */
		acquisition(fd, argc, argv);
		exit(0);
	}
	
	/* Lancement d'un fils */
	if ( fork() == 0 )
	{ /* Processus Fils 2 */
		fils2();
	}
	
	close(fd[0]);
	close(fd[1]);
	fprintf(stderr, "<pere> attente de la fin des processus!\n");
	i=wait(&s);
	i=wait(&s);
	printf("<pere> fin du programme\n");
	
	exit(EXIT_SUCCESS);
}

int main( int argc, char** argv )
{
	//printf("Resultat de acquisition  : %d\n", acquisition(fd, argc, argv));
	printf("Resultat de pere  : %d\n", pere(argc, argv));
	return 0;
}
